package day09.clone;

/**
 * @author success
 * @version 1.0
 * @description:本类用来演示:
 * @date 2019/7/25 0025
 */
public class TestUser {
    public static void main(String[] args) {
        //id - 基本类型
        //name - String
        //userInfo - 对象类型
        User u = new User(1,"tom",new UserInfo(1,"110"));

        //创建u对象的副本
        //java.lang.Object提供的clone方法
        try {
            User copy = (User) u.clone();

            //修改原来的对象的基本类型
            u.setId(100);

            //修改原来对象中维护的那个自定义对象类型
            u.getUserInfo().setPhone("119");

            //修改原来对象的String类型
            u.setName("jack");

            //观察副本copy对象的id的值有没有变化

            //浅拷贝的方式 - 将原来对象的属性,基本类型的话,是将属性值完全拷贝一份给了副本.
            System.out.println(copy.getId());

            //观察copy副本中的userInfo对象中的phone属性的值是否发生变化
            System.out.println(copy.getUserInfo().getPhone());

            //观察String
            System.out.println(copy.getName());

            //System.out.println(copy);

        } catch (CloneNotSupportedException e) {//不能被克隆
            //打印异常的堆栈的信息
            e.printStackTrace();
            //System.err.println("完蛋了,出现错误了!");
        }
    }
}
